<?php


class Zip {
    
    
    public static function zipDir($source, $destination){
        if(!extension_loaded('zip')){
            Message::log('Extension ZIP non chargée');
            return false;
        }
        if(!file_exists($source)){
            Message::log('Le dossier "'.$source.'" n\'existe pas. Il ne peut pas être zippé');
            return false;
        }
        $zip = new ZipArchive();
        if(!$zip->open($destination, ZIPARCHIVE::CREATE)){
            Message::log('Impossible de créer l\'archive "'.$destination.'"');
            return false;
        }
        
        $source = str_replace("\\", "/", $source);
        Message::debug("zipDir($source)");
    
        if (is_dir($source) === true){
            $files = new RecursiveIteratorIterator(
                    new RecursiveDirectoryIterator($source),
                    RecursiveIteratorIterator::SELF_FIRST
            );
            
            foreach ($files as $file){
                $file = str_replace("\\", "/", $file);
                
                // Ignore '.' et '..'
                if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) ) continue;
                
                $filePath = str_replace("\\", "/", realpath($file));
                $file = $source.(explode($source, $filePath)[1]);
                
                if (is_dir($file) === true){
                    Message::debug("zipDir ($file)");
                    $zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
                }
                else if (is_file($file) === true){
                    Message::debug("zipFile($file)");
                    $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
                }
            }
        }
        else if (is_file($source) === true){
            $zip->addFromString(basename($source), file_get_contents($source));
        }
        
        return $zip->close();
    }
    
    
    public static function unzipFile($file, $destination='./'){
        $zip = new ZipArchive;
        if ($zip->open($file)) {
            $zip->extractTo($destination);
            $zip->close();
            Message::debug("unzip ($file) ok");
            return true;
        } else {
	    Message::error('Le fichier n\'a pas pu être décompressé');
            Message::log("L'extraction du fichier ($file) vers ($destination) a échoué");
        }
        return false;
    }

  
  
}


?>